package com.itheima.nio.buffer.demo09;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.concurrent.TimeUnit;

public class NioClientDemo01 {

    public static void main(String[] args) throws IOException, InterruptedException {

        // 1. 打开一个SocketChannel
        SocketChannel socketChannel = SocketChannel.open();

        // 2. 连接指定的服务器
        socketChannel.connect(new InetSocketAddress("169.254.106.206" , 8080)) ;

        // 把SocketChannel设置为非阻塞
        // socketChannel.configureBlocking(false) ;

        // 3. 创建ByteBuffer(准备要写的数据)
        ByteBuffer byteBuffer = ByteBuffer.wrap("hello,nio,我来了".getBytes("UTF-8"));

        // 4. 使用SocketChannel将Buffer中的数据写入到服务端
        socketChannel.write(byteBuffer) ;

        /**
         * SocketChannel是一个非阻塞模式的IO模型，如果我们客户端的程序先执行完毕了，此时我们的服务端程序可能还没有向通道中写数据
         * 因此我们的客户单端程序没有接收到服务器端所传递过来数据. 怎么解决？
         *
         * 1. 让客户端线程休眠一小会儿
         * 2. 让我们的客户端阻塞
         */

        // 接收服务器端所传递过来的数据
        ByteBuffer allocate = ByteBuffer.allocate(1024);
        System.out.println("准备读取服务器端所返回的数据..............");
        int read = socketChannel.read(allocate);
        System.out.println("读取到了服务器端所返回的数据..............");
        System.out.println(new String(allocate.array() , 0 , read , "UTF-8"));

        // 5. 释放资源
        socketChannel.close();

    }

}
